import cv2  # 导入OpenCV库

# 打开视频文件
vc = cv2.VideoCapture('bg.mp4')

# 定义一个函数用于显示图像
def img_show(name, img):
    cv2.imshow(name, img)  # 显示图像
    cv2.waitKey(0)         # 按任意键退出
    cv2.destroyAllWindows()  # 关闭所有OpenCV创建的窗口

# 检查视频是否成功打开
if vc.isOpened():
    # 如果视频打开成功，设置open为True
    # frame 为读取到的帧图像
    open, frame = vc.read()
    img_show('img(01)', frame)
else:
    # 如果视频打开失败，设置open为False
    open = False

# 循环读取视频帧
while open:
    # 读取视频的下一帧，ret为布尔值表示是否成功读取，frame为帧图像
    ret, frame = vc.read()
    # 如果读取到的帧为空，跳出循环
    if frame is None:
        break
    # 如果成功读取到帧
    if ret == True:
        # 从视频流中读取帧
        # 将帧从BGR颜色空间转换为灰度空间
        # 灰度值 = 0.299 * R + 0.587 * G + 0.114 * B
        # 这个公式反映了人眼对绿色的敏感度最高，对蓝色的敏感度最低。
        # 帧图的颜色通道为 BGR
        img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 显示灰度图像
        cv2.imshow('result', img_gray)
        # 等待10毫秒=0.01秒，如果按下Esc键（ASCII码为27），则退出循环
        # 在这10毫秒内有按键被按下，cv2.waitKey(10) 会立即返回按键的ASCII码；如果没有按键事件发生，则返回-1。
        if cv2.waitKey(10) & 0xFF == 27:
            break

vc.release()  # 释放视频捕获对象
cv2.destroyAllWindows()  # 关闭所有OpenCV创建的窗口